package jfrederick8;

public abstract class GameCharacter {
	// Include anything that is used by every type of character
	
	/**Character's Name*/
	protected String name;
	/**Characters Unit Type*/
	protected String unitType;
	/**Character's Stats*/
	protected CharacterStats stats;
	/**The rate at which the Character's stats grow as the character levels up*/
	protected GrowthRates rates;
	/**Characters level*/
	protected int level;
	/**Characters experience*/
	protected int experience;
	/**Characters movement distance*/
	protected int movementDistance;
	/**Characters movement type (walk/fly/etc */
	protected String movementType;
	/** we'll need to know whether a unit began as a recruit for stat growth */
	protected boolean recruit;	
	/**states whether a unit has moved this turn */
	protected boolean moved;		
	/**lists what a unit is carrying*/
	protected Item[] itemsHeld;
	/**lists the units weapon proficiencies*/
	protected WeaponProficiencies weaponProficiencies;
	/**unit's sight*/
	protected int sight;
	
	
	/**lists what a unit is equipped with*/
	protected Weapon[] primaryWeapon;
	protected Weapon[] secondaryWeapon;
	protected Armor[] armor;
	protected Armor[] accessories;
		

	public GameCharacter(String name, CharacterStats stats, GrowthRates rates, String unitType, int level, int experience, int movementDistance, String movementType, boolean recruit, boolean moved, Item[] itemsHeld, Weapon[] primaryWeapon, Weapon[] secondaryWeapon, Armor[] armor, Armor[] accessories, WeaponProficiencies weaponProficiencies, int sight) {
		this.name = name;
		this.stats = stats;
		this.rates = rates;
		this.unitType = unitType;
		this.level = level;
		this.experience = experience;
		this.movementDistance = movementDistance;
		this.movementType = movementType;
		this.recruit = recruit;
		this.moved = moved;
		this.itemsHeld = itemsHeld;
		this.primaryWeapon = primaryWeapon;
		this.secondaryWeapon = secondaryWeapon;
		this.armor = armor;
		this.accessories = accessories;
		this.weaponProficiencies = weaponProficiencies;
		this.sight=sight;
				
	}//end constructor GameCharacter
}//end class GameCharacter

/*
 package jfrederick8;

public class Person {
	private String name, description, className, classDescription;
	private int xLoc, yLoc, faction, classNum, level, exp, expRequired, itemCapacity, statLevel;
	private int[] stats, proficiencies, profExp, profExpRequired, itemStatChanges, statChances;
	private Item tempItem1, tempItem2;
	private Item[] itemList, equippedList;
	private String[] armorSlots;
	private boolean alternatePic;
	
	public Person(){
		
	}//end constructor Person
	
	private void classSet(){
		if (classNum<38){
			armorSlots = new String[]{"Head","Implant","Armor","Boots","Primary Hand","Secondary Hand"};
			itemCapacity = 5;
			proficiencies = new int[18];
			for (int i=0;i<proficiencies.length;i++){
				proficiencies[i] = (Integer)null;
			}
			stats = new int[]{25,5,5,5,5,5,5,5,5,5,5,5,5,5};
			statLevel = 0;
		} else if(classNum>=38){
			//armorSlots = 
		}
		
		switch (classNum){
			case 0:
				className = "Recruit";
				classDescription = "This base level class is very weak and limited in abilities, however Recruits are known for eventually becoming the strongest and smartest in their field.";
				proficiencies[2] = 0;
				break;
			case 1:
				className = "Pilot";
				classDescription = "This class introduces the tactic of flight to battle, allowing a Pilot to fire down on his opponents from the skies.";
				proficiencies[3] = 0;
				proficiencies[12] = 0; 
				proficiencies[8] = 0;
				break;
			case 2:
				className = "Flight Engineer";
				classDescription = "This mid level flight expert is a terror in the sky as well as having a decent technical aptitude.";
				proficiencies[5] = 0;
				break;
			case 3:
				className = "Harbinger of the Skies";
				classDescription = "";
				proficiencies[7] = 0;
				break;
			case 4:
				className = "Technician";
				classDescription = "";
				proficiencies[6] = 0;
				proficiencies[10] = 0;
				proficiencies[15] = 0;
				break;
			case 5:
				className = "Engineer";
				classDescription = "";
				proficiencies[14] = 0;
				break;
			case 6:
				className = "Master Tinkerer";
				classDescription = "";
				proficiencies[7] = 0;
				break;
			case 7:
				className = "Medic";
				classDescription = "";
				proficiencies[8] = 0;
				proficiencies[13] = 0;
				break;
			case 8:
				className = "Medical Technician";
				classDescription = "";
				proficiencies[10] = 0;
				break;
			case 9:
				className = "Professor of Medicine";
				 classDescription = "";
				 proficiencies[6] = 0;
				break;
			case 10:
				className = "Tracker";
				classDescription = "";
				proficiencies[3] = 0;
				proficiencies[8] = 0;
				proficiencies[17] = 0;
				break;
			case 11:
				className = "Animal Trainer";
				classDescription = "";
				proficiencies[16] = 0;
				break;
			case 12:
				className = "Beast Master";
				classDescription = "";
				proficiencies[13] = 0;
				break;
			case 13:
				className = "Swordsman";
				classDescription = "";
				proficiencies[0] = 0;
				proficiencies[8] = 0;
				break;
			case 14:
				className = "Bladesman";
				classDescription = "";
				proficiencies[17] = 0;
				break;
			case 15:
				className = "Master of the Temple";
				classDescription = "";
				break;
			case 16:
				className = "Vigilante";
				classDescription = "";
				proficiencies[17] = 0;
				break;
			case 17:
				className = "Lone Wolf";
				classDescription = "";
				break;
			case 18:
				className = "Lawman";
				classDescription = "";
				proficiencies[8] = 0;
				break;
			case 19:
				className = "Detective";
				 classDescription = "";
				 proficiencies[15] = 0;
				break;
			case 20:
				className = "Pistoleer";
				classDescription = "";
				proficiencies[17] = 0;
				break;
			case 21:
				className = "Chief of Police";
				classDescription = "";
				proficiencies[4] = 0;
				break;
			case 22:
				className = "Sreet Thug";
				classDescription = "";
				proficiencies[2] = 0;
				break;
			case 23:
				className = "Soldier";
				classDescription = "";
				proficiencies[8] = 0;
				proficiencies[3] = 0;
				break;
			case 24:
				className = "Rifleman";
				classDescription = "";
				proficiencies[17] = 0;
				break;
			case 25:
				className = "Marksman";
				classDescription = "";
				break;
			case 26:
				className = "Gunner";
				classDescription = "";
				proficiencies[5] = 0;
				proficiencies[9] = 0;
				break;
			case 27:
				className = "Heavy Gunner";
				classDescription = "";
				proficiencies[7] = 0;
				break;
			case 28:
				className = "Genadier";
				classDescription = "";
				proficiencies[9] = 0;
				proficiencies[7] = 0;
				break;
			case 29:
				className = "Demoman";
				 classDescription = "";
				break;
			case 30:
				className = "Criminal";
				classDescription = "";
				proficiencies[8] = 0;
				break;
			case 31:
				className = "Mob Boss";
				classDescription = "";
				proficiencies[7] = 0;
				break;
			case 32:
				className = "Crime Lord";
				classDescription = "";
				proficiencies[4] = 0;
				break;
			case 33:
				className = "Street Rat";
				classDescription = "";
				proficiencies[2] = 0;
				break;
			case 34:
				className = "Thief";
				classDescription = "";
				proficiencies[8] = 0;
				proficiencies[17] = 0;
				break;
			case 35:
				className = "Assassin";
				classDescription = "";
				proficiencies[0] = 0;
				break;
			case 36:
				className = "Sneak";
				classDescription = "";
				break;
			case 37:
				className = "Shadow";
				 classDescription = "";
				 if (proficiencies[0] == (Integer)null)
					 proficiencies[0] = 0;
				break;
		}
		
		//classDescriptions-----------------------------------------------
		//stats for generic
	}//end method classSet
	
	private void levelUp(){
		exp = 0;
		//expReq
		//up stats
	}
}//end class Person
 */